package com.demoworld;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.apache.solr.common.params.DefaultSolrParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.*;

/**
 * Created by francis on 2017/6/14.
 */
public class main {
    private final static String SOLR_URL = "http://xxx:8983/solr/yuewen";

    public static void main(String[] args) throws IOException, SolrServerException {
//        addDoc("　有时从对立面的角度反衬心理景写哀。我国古典诗歌我国古典诗元稹的这首《行宫》是一首抒发盛衰之感的诗，可与白居易《上阳白发人》参互并观。这里的古行宫即洛阳行宫上阳宫，白头宫女即“上阳白发人”。据白居易《上阳白发人》，这些宫女天宝（742-756）末年被“潜配”到上阳宫，在这冷宫里一闭四十多年，成了白发宫人。这首短小精悍的五绝具有深邃的意境，富有隽永的诗味，倾诉了宫女无穷的哀怨之情，寄托了诗人深沉的盛衰之感。\n" +
//                "　　此诗首句点明地点：古行宫；二句暗示时间：红花盛开之季；三句介绍人物；白头宫女；四句描绘动作：闲坐说玄宗。构筑了一幅完整动人的图画。当年花容月貌，娇姿艳质，辗转落入宫中，寂寞幽怨；此时青春消逝，红颜憔悴；闲坐无聊，只有谈论已往。此情此景，十分凄绝。这首诗平实，但很有概括力，也很含蓄，并给人以想象的天地，历史沧桑之感尽在不言之中。\n" +
//                "　　诗人塑造意境，艺术上主要运用了两种表现手法。一是以少总多。我国古典诗歌讲究精炼，写景、言情、叙事都要以少总多。这首诗正具有举一而反三，字少而意多的特点。四句诗，首句指明地点，是一座空虚冷落的古行宫；次句暗示环境和时间，宫中红花盛开，正当春天季节；三句交代人物，几个白头宫女，与末句联系起来推想，可知是玄宗天宝末年进宫而幸存下来的老宫人；末句描写动作，宫女们正闲坐回忆、谈论天宝遗事。二十个字，地点、时间、人物、动作，全都表现出来了，构成了一幅非常生动的画面。这个画面触发读者联翩的浮想：宫女们年轻时都是月貌花容，娇姿艳质，这些美丽的宫女被禁闭在这冷落的古行宫之中，成日价寂寞无聊，看着宫花，花开花落，年复一年，青春消逝，红颜憔悴，白发频添，如此被摧残，往事不堪重省。然而，她们被禁闭冷宫，与世隔绝，别无话题，却只能回顾天宝时代玄宗遗事，此景此情，令人凄绝。“寥落”、“寂寞”、“闲坐”，既描绘当时的情景，也反映诗人的倾向。凄凉的身世，哀怨的情怀，盛衰的感慨，二十个字描绘出那样生动的画面，表现出那样深刻的意思，所以宋洪迈《容斋随笔》卷二说这首诗“语少意足，有无穷之味”；明胡应麟《诗薮·内编》卷六以为这首诗是王建所作，并说“语意绝妙，合（王）建七言《宫词》百首，不易此二十字也”。\n" +
//                "　　另一个表现手法是以乐景写哀。我国古典诗歌，其所写景物，有时从对立面的角度反衬心理，利用忧思愁苦的心情同良辰美景气氛之间的矛盾，以乐景写哀情，却能收到很好的艺术效果。这首诗也运用了这一手法。诗所要表现的是凄凉哀怨的心境，但却着意描绘红艳的宫花。红花一般是表现热闹场面，烘托欢乐情绪的，但在这里却起了很重要的反衬作用：盛开的红花和寥落的行宫相映衬，加强了时移世迁的盛衰之感；春天的红花和宫女的白发相映衬，表现了红颜易老的人生感慨；红花美景与凄寂心境相映衬，突出了宫女被禁闭的哀怨情绪。红花，在这里起了很大的作用。这都是利用好景致与恶心情的矛盾，来突出中心思想，即王夫之《姜斋诗话》所谓“以乐景写哀”，一倍增其哀。白居易《上阳白发人》“宫莺百啭愁厌闻，梁燕双栖老休妒”，也可以说是以乐写哀。不过白居易的写法直接揭示了乐景写哀情的矛盾，而元稹《行宫》则是以乐景作比较含蓄的反衬，显得更有余味。");

        delete("112");
    }

    //多个关键字查询
    public static void query_muti() throws IOException, SolrServerException {
        SolrClient solrClient = new HttpSolrClient.Builder(SOLR_URL).build();
        Map<String, String> tmpMap = new HashMap<>();
        tmpMap.put("indent", "off");//是否格式化输出结果， 如果你在网页上测试， 可以选择 on， 如果是api调用，请选择关闭， 减少数据传输
        tmpMap.put("q", "*:*");
        tmpMap.put("fq", "id:111 112");//查找id字段中包含111 或者 112的数据
        tmpMap.put("wt", "json");//输出格式
        SolrParams tmpParams = new MapSolrParams(tmpMap);
        QueryResponse tmpResponse = solrClient.query(tmpParams);
        solrClient.close();
        System.out.println(tmpResponse.getResults().getNumFound());//打印查询的总条数
    }

    //单个关键字查询
    public static void query() throws IOException, SolrServerException {
        SolrClient solrClient = new HttpSolrClient.Builder(SOLR_URL).build();
        Map<String, String> tmpMap = new HashMap<>();
        tmpMap.put("indent", "off");//是否格式化输出结果， 如果你在网页上测试， 可以选择 on， 如果是api调用，请选择关闭， 减少数据传输
        tmpMap.put("q", "*updateDocupdateDoc*");//关键字
        tmpMap.put("wt", "json");//输出格式
        SolrParams tmpParams = new MapSolrParams(tmpMap);
        QueryResponse tmpResponse = solrClient.query(tmpParams);
        solrClient.close();
        System.out.println(tmpResponse.getResults().getNumFound());//打印查询的总条数
    }

    //添加一个文档， 只要id每次不同， 则每次调用都会添加一个新的文档， 如果id相同，则表示添加同一个文档， 这个文档会被更新掉
    public static void addDoc(String value) throws IOException, SolrServerException {
        SolrClient solrClient = new HttpSolrClient.Builder(SOLR_URL).build();
        SolrInputDocument tmpDoc = new SolrInputDocument();
        tmpDoc.addField("value", value);
        tmpDoc.addField("id", 112);
        Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
        docs.add(tmpDoc);
        UpdateResponse tmpResponse = null;
        try {
            tmpResponse = solrClient.add(docs);
            solrClient.commit();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                solrClient.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        System.out.println(tmpResponse.getElapsedTime());
    }

    //添加一个文档， 只要id每次不同， 则每次调用都会添加一个新的文档， 如果id相同，则表示添加同一个文档， 这个文档会被更新掉
    public static void delete(String id) throws IOException, SolrServerException {
        SolrClient solrClient = new HttpSolrClient.Builder(SOLR_URL).build();
        UpdateResponse tmpResponse = null;
        try {
            tmpResponse = solrClient.deleteById(id);
            solrClient.commit();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                solrClient.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        System.out.println(tmpResponse.getElapsedTime());
    }


}
